﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.IO;

using WaveLib;


//questo programma fa un compito semplice
//testare se l'output è in pcm...
//scriverlo su wave e vedere se lo legge


namespace BasicWave
{
    public partial class Form1 : Form
    {


        private CMasterChannel m_master;

        private CMicrophoneChannel m_mic;

        private CAuxExportChannel m_aux;

        private CMp3Channel m_mp3;



        



        public Form1()
        {
            InitializeComponent();
        }

        

        private void Form1_Load(object sender, EventArgs e)
        {
          
            m_master = new CMasterChannel();

            m_mic = new CMicrophoneChannel(ref m_master);

            m_mp3 = new CMp3Channel(m_master, "speed.mp3");
            m_mp3.Play();

            m_aux = new CAuxExportChannel(ref m_master);

            //HO FATTO DISCRETI PROGRESSI
            /* HO CREATO LA STRUTTURA BASE
             * HO IMPOSTATO LE CHIAMATE DI CALLBACK
             * L'INTERFACCIA E LA REGISTRAZIONE DEI CANALI AUDIO
             * E L'ESPORTAZIONE
             * 
             * CI SONO PROBLEMI PER QUANTO RIGUARDA LA VELOCITA0
             * SICURAMENTE LA PI SONO LENTE ED I CALCOLI CHE FACCIO NON LI AIUTANO
             * POI .NET IN GENERE E' PROPRIO PESANTE
             * 
             * 
             * COSE DA PENSARE DI FARE SONO:
             * CONTROLLARE LA MISCELAZIONE DEI CANALI IN FLOAT
             * REFACTORING PER LA GESTIONE DEL VOLUME SU OGNI CANALE
             * POSSIBILITA' DI IMPLEMENTARE LE DIRECTX AUDIO .NET
             * */

            trackBar1.Value = m_mic.Volume;
            trackBar2.Value = m_mp3.Volume;


            
        }

       
           

        

        protected override void OnClosed(EventArgs e)
        {

            if (m_mic != null)
                m_mic.Dispose();

            if (m_aux != null)
                m_aux.Dispose();

            if (m_mp3 != null)
                m_mp3.Dispose();

            if (m_master != null)
                m_master.Dispose(); 

            base.OnClosed(e);
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            m_mic.Volume = trackBar1.Value;
        }

        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            m_mp3.Volume = trackBar2.Value;
        }



    }
}
